package com.yuanian.ecsplus.meta;

import com.yuanian.ecsplus.platform.PlatformSupport;
import com.yuanian.ecsplus.reflect.PersistenceMetaClass;

import java.util.List;

/**
 * 基础meta,  entity和vo都应该有的通用方法
 * @param <T>
 */
public interface Meta<T> {

    PlatformSupport getPlatformSupport();

    /**
     * 获取元字节
     * @return
     */
    PersistenceMetaClass<T> getMetaClass();


    /**
     * 保存数据，无就插入，有就修改
     * @param obj
     */
    void save(T obj);

    /**
     * 插入数据
     * @param obj
     */
    void insert(T obj);

    /**
     * 发布数据
     * @param obj
     */
    void issue(T obj);

    /**
     * 修改数据
     * @param obj
     */
    void update(T obj);

    /**
     * 删除数据
     * @param obj
     */
    void delete(T obj);

    /**
     * 批量插入
     * @param obj
     * @return
     */
    int batchInsert(List<T> obj);

    /**
     * 批量保存,无就插入，有就修改
     * @param list
     * @return
     */
    int batchSave(List<T> list);

    /**
     * 批量删除
     * @param list
     * @return
     */
    int batchDelete(List<T> list);

    T selectBoDataByBoMainId(String objectId);

    /**
     * 根据SQL搜索数据
     * @param sql
     * @return
     */
    List<T> findList(String sql);

}
